home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / progwin.zip / ROP2LOOK.ZIP / ROP2LOOK.C next >
C/C++ Source or Header  |  1991-11-02  |  3KB  |  112 lines

  1. /*-----------------------------------------
  2.   ROP2LOOK.C -- ROP2 Demonstration Program
  3.                 (c) Charles Petzold, 1990
  4.   -----------------------------------------*/
  5.  
  6. #include <windows.h>
  7.  
  8. long FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
  9.  
  10. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  11.                     LPSTR lpszCmdLine, int nCmdShow)
  12. {
  13.   static char szAppName[] = "Rop2Look";
  14.   HWND hwnd;
  15.   MSG msg;
  16.   WNDCLASS wndclass;
  17.  
  18.   if (!hPrevInstance)
  19.   {
  20.     wndclass.style = CS_HREDRAW | CS_VREDRAW;
  21.     wndclass.lpfnWndProc = WndProc;
  22.     wndclass.cbClsExtra = 0;
  23.     wndclass.cbWndExtra = 0;
  24.     wndclass.hInstance = hInstance;
  25.     wndclass.hIcon = NULL;
  26.     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  27.     wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
  28.     wndclass.lpszMenuName = szAppName;
  29.     wndclass.lpszClassName = szAppName;
  30.     
  31.     RegisterClass (&wndclass);
  32.   }
  33.  
  34.   hwnd = CreateWindow(szAppName, "ROP2 Demonstration Program",
  35.                       WS_OVERLAPPEDWINDOW,
  36.                       CW_USEDEFAULT, CW_USEDEFAULT,
  37.                       CW_USEDEFAULT, CW_USEDEFAULT,
  38.                       NULL, NULL, hInstance, NULL);
  39.  
  40.   ShowWindow(hwnd, nCmdShow);
  41.   UpdateWindow(hwnd);
  42.  
  43.   while(GetMessage(&msg, NULL, 0, 0))
  44.   {
  45.     TranslateMessage(&msg);
  46.     DispatchMessage(&msg);
  47.   }
  48.   return msg.wParam;
  49. }
  50.  
  51. long FAR PASCAL WndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
  52. {
  53.   static LOGPEN lpBlack = {PS_SOLID, 1, 1, RGB(0,0,0)},
  54.                 lpWhite = {PS_SOLID, 1, 1, RGB(255,255,255)};
  55.   static short nDrawingMode = R2_COPYPEN;
  56.   HDC hdc;
  57.   HMENU hMenu;
  58.   HPEN hPenBlack, hPenWhite;
  59.   PAINTSTRUCT ps;
  60.   RECT rect;
  61.   short i;
  62.  
  63.   switch(message)
  64.   {
  65.     case WM_COMMAND:
  66.       hMenu = GetMenu(hwnd);
  67.       CheckMenuItem(hMenu, nDrawingMode, MF_UNCHECKED);
  68.       nDrawingMode = wParam;
  69.       CheckMenuItem(hMenu, nDrawingMode, MF_CHECKED);
  70.       InvalidateRect(hwnd, NULL, FALSE);
  71.       return 0;
  72.  
  73.     case WM_PAINT:
  74.       hdc = BeginPaint(hwnd, &ps);
  75.  
  76.       hPenBlack = CreatePenIndirect(&lpBlack);
  77.       hPenWhite = CreatePenIndirect(&lpWhite);
  78.  
  79.       SetMapMode(hdc, MM_ANISOTROPIC);
  80.       GetClientRect(hwnd, &rect);
  81.       SetViewportExt(hdc, rect.right, rect.bottom);
  82.       SetWindowExt(hdc, 10, 4);
  83.  
  84.       for (i=0; i<10; i += 2)
  85.       {
  86.         SetRect(&rect, i, 0, i+2, 4);
  87.         FillRect(hdc, &rect, GetStockObject(i/2));
  88.       }
  89.       SetROP2(hdc, nDrawingMode);
  90.  
  91.       SelectObject(hdc, hPenWhite);
  92.       MoveTo(hdc, 1, 1);
  93.       LineTo(hdc, 9, 1);
  94.  
  95.       SelectObject(hdc, hPenBlack);
  96.       MoveTo(hdc, 1, 3);
  97.       LineTo(hdc, 9, 3);
  98.  
  99.       EndPaint(hwnd, &ps);
  100.  
  101.       DeleteObject(hPenBlack);
  102.       DeleteObject(hPenWhite);
  103.       return 0;
  104.  
  105.     case WM_DESTROY:
  106.       PostQuitMessage(0);
  107.       return 0;
  108.   }
  109.   return DefWindowProc(hwnd, message, wParam, lParam);
  110. }
  111.  
  112.